﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Data.Entity;
using Kendo.Mvc.UI;
using Kendo.Mvc.Extensions;
using QLGT_2.Models;
using System.Web.Script.Serialization;
using System.Data.OleDb;
using System.Data;
using System.Data.Entity.Validation;
using System.Text;

namespace QLGT_2.Controllers
{
    public class QLDanhMucController : Controller
    {
        QLGTContext db = new QLGTContext();
        List<SelectListItem> mess = new List<SelectListItem>();
        int stt = 0;
        bool KTChucVu, KTNganh, KTKhoa, KTNhaXuatBan, KTTacGia, KTDaoTao, KTMonHoc, KTGiaoTrinh;

        private void SaveChanges(DbContext context)
        {
            try
            {
                context.SaveChanges();
            }
            catch (DbEntityValidationException ex)
            {
                StringBuilder sb = new StringBuilder();

                foreach (var failure in ex.EntityValidationErrors)
                {
                    sb.AppendFormat("{0} failed validation\n", failure.Entry.Entity.GetType());
                    foreach (var error in failure.ValidationErrors)
                    {
                        sb.AppendFormat("- {0} : {1}", error.PropertyName, error.ErrorMessage);
                        sb.AppendLine();
                    }
                }

                throw new DbEntityValidationException(
                    "Entity Validation Failed - errors follow:\n" +
                    sb.ToString(), ex
                ); // Add the original exception as the innerException
            }
        }
        
        #region QLChucVu - Tạm bỏ
        public JsonResult LayChucVu()
        {
            return Json(db.tbl_ChucVus.ToList(), JsonRequestBehavior.AllowGet);
        }
        public ActionResult ChucVu()
        {
            if (!CheckRole.IsRole("qlgt_gt_xem", Session["VietTat"] as string[]))
                return Content("Bạn chưa <a href='/Home/Login'>đăng nhập hệ thống</a> hoặc không có quyền sử dụng chức năng này.");

            if (!Request.IsAjaxRequest())
                return View();

            return PartialView();
        }
        public ActionResult HienThiChucVu([DataSourceRequest] DataSourceRequest request)
        {
            return Json(db.tbl_ChucVus.ToDataSourceResult(request));
        }

        //[ValidateAntiForgeryToken]
        public ActionResult TaoChucVu([DataSourceRequest] DataSourceRequest request, tbl_ChucVu data)
        {
            if (!CheckRole.IsRole("qlgt_gt_t", Session["VietTat"] as string[]))
                return this.Json(new DataSourceResult { Errors = "Bạn không có quyền thực hiện chức năng này!" });

            if (data != null && ModelState.IsValid)
            {
                var createdata = db.tbl_ChucVus.Where(m => m.ChucVu.ToLower() == data.ChucVu.ToLower().Trim()).ToList().Count;
                if (createdata == 0)
                {
                    db.tbl_ChucVus.Add(data);
                    db.SaveChanges();
                   // state = true;
                    ////mess = "Thêm mới thành công!";
                }
                else
                {
                    return this.Json(new DataSourceResult { Errors = "Chức vụ đã tồn tại!" });
                }
            }
            return Json(ModelState.ToDataSourceResult());
        }
        public ActionResult SuaChucVu([DataSourceRequest] DataSourceRequest request, tbl_ChucVu data)
        {
            if (!CheckRole.IsRole("qlgt_gt_s", Session["VietTat"] as string[]))
                return this.Json(new DataSourceResult { Errors = "Bạn không có quyền thực hiện chức năng này!" });

            if (data != null && ModelState.IsValid)
            {
                db.Entry(data).State = EntityState.Modified;
                db.SaveChanges();
            }
            return Json(ModelState.ToDataSourceResult());
        }
        public ActionResult XoaChucVu([DataSourceRequest] DataSourceRequest request, tbl_ChucVu data)
        {
            if (!CheckRole.IsRole("qlgt_gt_x", Session["VietTat"] as string[]))
                return this.Json(new DataSourceResult { Errors = "Bạn không có quyền thực hiện chức năng này!" });

            if (data != null)
            {
                try
                {
                    tbl_ChucVu itemdata = db.tbl_ChucVus.First(item => item.MaChucVu == data.MaChucVu);
                    db.tbl_ChucVus.Remove(itemdata);
                    db.SaveChanges();
                }
                catch (Exception)
                {
                    return this.Json(new DataSourceResult { Errors = "Dữ liệu liên quan đến Chức vụ vẫn còn! Không thể xóa!" });
                }
                
            }
            return Json(ModelState.ToDataSourceResult());
        }

        public ActionResult ImportChucVu(HttpPostedFileBase FileImport)
        {
            bool state = false;
            if (!CheckRole.IsRole("qlgt_gt_x", Session["VietTat"] as string[]))
                return Json(new { State = false, Message = "Bạn không có quyền thực hiện chức năng này!" });
                //return this.Json(new DataSourceResult { Errors = "Bạn không có quyền thực hiện chức năng này!" });

            
            if (FileImport != null)
            {
                // thuc hien thao tac tai day
                if (FileImport.ContentLength > 0)
                {
                    string Extension = System.IO.Path.GetExtension(FileImport.FileName);
                    if (Extension == ".xls" || Extension == ".xlsx")
                    {
                        string path = string.Concat(Server.MapPath("~/Uploads/File/" + DateTime.Now.ToString("MMddyyyyHHmmssfff") + FileImport.FileName));
                        //if (System.IO.File.Exists(path))
                        //{

                        //    System.IO.File.Delete(path);
                        //}
                        FileImport.SaveAs(path);
                        OleDbConnection oledbcon = new OleDbConnection("provider=microsoft.ace.oledb.12.0;data source=" + path + ";extended properties=excel 12.0;");
                        oledbcon.Open();
                        DataTable ExcelSheets = oledbcon.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
                        string SpreadSheetName = ExcelSheets.Rows[0]["TABLE_NAME"].ToString();
                        OleDbCommand oledbcmd = new OleDbCommand("Select * from [" + SpreadSheetName + "]", oledbcon);
                        OleDbDataAdapter oledbda = new OleDbDataAdapter(oledbcmd);

                        DataTable dt = new DataTable();
                        tbl_ChucVu item;
                        var Kv = db.tbl_ChucVus.Select(m => m.ChucVu);
                        oledbda.Fill(dt);
                        if (dt.Rows.Count > 0)
                        {
                            if (!dt.Columns.Contains("Chức vụ"))
                            {
                                mess.Add(new SelectListItem {Text = "Cột Chức vụ không tồn tại!"});
                                goto next;
                            }
                            for (int i = 0; i < dt.Rows.Count - 1; i++)
                            {
                                foreach (var a in Kv)
                                {
                                    KTChucVu = false;
                                    if (a.ToString().ToLower().Trim() == dt.Rows[i]["Chức vụ"].ToString().ToLower().Trim())
                                    {
                                        KTChucVu = true;
                                        break;
                                    }
                                }

                                if (!KTChucVu)
                                {
                                    item = new tbl_ChucVu();
                                    item.ChucVu = dt.Rows[i]["Chức vụ"].ToString().Trim();
                                    if (!dt.Columns.Contains("Ghi Chú"))
                                    {
                                        item.GhiChu = null;
                                    }
                                    else
                                    {
                                        item.GhiChu = dt.Rows[i]["Ghi chú"].ToString().Trim();
                                    }
                                    db.tbl_ChucVus.Add(item);
                                    db.SaveChanges();
                                    stt += 1;
                                }
                                else
                                {
                                    mess.Add(new SelectListItem { Text = "Chức vụ: " + dt.Rows[i]["Chức vụ"].ToString() + " đã tồn tại!" });
                                }
                                //}
                                //catch
                                //{
                                //}
                            }
                        next:
                            // Response.Write(count);

                            if (mess.Count() > 0)
                            {
                                state = false;
                                if(stt>0)
                                {
                                    mess.Add(new SelectListItem { Text = "Thực hiện chèn thành công " + stt + " bản ghi!" });
                                }
                            }
                            else
                            {
                                state = true;
                                mess.Add(new SelectListItem { Text = "Thực hiện chèn thành công " + stt + " bản ghi!" });
                            }
                        }
                        else
                        {
                            Response.Write("Bạn phải nhập file định dạng excel!");
                        }
                        oledbcon.Close();
                        System.IO.File.Delete(path);
                    }

                }
            }
            else
                mess.Add(new SelectListItem { Text ="Có lỗi."});

            return Json(new { State = state, Message = mess });
        }
        #endregion 

        #region QLHeDaoTao
        public JsonResult LayHeDaoTao()
        {
            return Json(db.tbl_HeDaoTaos.ToList(), JsonRequestBehavior.AllowGet);
        }
        public ActionResult HeDaoTao()
        {
            if (!CheckRole.IsRole("qldm_hdt_xem", Session["VietTat"] as string[]))
                return Content("Bạn chưa <a href='/Home/Login'>đăng nhập hệ thống</a> hoặc không có quyền sử dụng chức năng này.");
            if (!Request.IsAjaxRequest())
                return View();

            return PartialView();
        }
        public ActionResult HienThiHeDaoTao([DataSourceRequest] DataSourceRequest request)
        {
            return Json(db.tbl_HeDaoTaos.ToDataSourceResult(request));
        }

        //[ValidateAntiForgeryToken]
        public ActionResult TaoHeDaoTao([DataSourceRequest] DataSourceRequest request, tbl_HeDaoTao data)
        {
            if (!CheckRole.IsRole("qldm_hdt_t", Session["VietTat"] as string[]))
                return this.Json(new DataSourceResult { Errors = "Bạn không có quyền thực hiện chức năng này!" });
            if (data != null && ModelState.IsValid)
            {
                var createdata = db.tbl_HeDaoTaos.Where(m => m.TenHeDaoTao.ToLower() == data.TenHeDaoTao.ToLower().Trim()).ToList().Count;
                if (createdata == 0)
                {
                    db.tbl_HeDaoTaos.Add(data);
                    db.SaveChanges();
                }
                else
                {
                    return this.Json(new DataSourceResult { Errors = "Hệ đào tạo đã tồn tại!" });
                }
            }
            return Json(ModelState.ToDataSourceResult());
        }
        public ActionResult SuaHeDaoTao([DataSourceRequest] DataSourceRequest request, tbl_HeDaoTao data)
        {
            if (!CheckRole.IsRole("qldm_hdt_s", Session["VietTat"] as string[]))
                return this.Json(new DataSourceResult { Errors = "Bạn không có quyền thực hiện chức năng này!" });
            if (data != null && ModelState.IsValid)
            {
                db.Entry(data).State = EntityState.Modified;
                db.SaveChanges();
            }
            return Json(ModelState.ToDataSourceResult());
        }
        public ActionResult XoaHeDaoTao([DataSourceRequest] DataSourceRequest request, tbl_HeDaoTao data)
        {
            if (!CheckRole.IsRole("qldm_hdt_x", Session["VietTat"] as string[]))
                return this.Json(new DataSourceResult { Errors = "Bạn không có quyền thực hiện chức năng này!" });
            if (data != null)
            {
                try
                {
                    tbl_HeDaoTao itemdata = db.tbl_HeDaoTaos.First(item => item.TenHeDaoTao == data.TenHeDaoTao);
                    db.tbl_HeDaoTaos.Remove(itemdata);
                    db.SaveChanges();
                }
                catch (Exception)
                {

                    return this.Json(new DataSourceResult { Errors = "Dữ liệu liên quan đến Hệ đào tạo này vẫn tồn tại!" });
                }
               
            }
            return Json(ModelState.ToDataSourceResult());
        }
        #endregion

        #region QLHocHam
        public JsonResult LayHocHam()
        {
            return Json(db.tbl_HocHams.ToList(), JsonRequestBehavior.AllowGet);
        }
        public ActionResult HocHam()
        {
            if (!CheckRole.IsRole("qldm_hh_xem", Session["VietTat"] as string[]))
                return Content("Bạn chưa <a href='/Home/Login'>đăng nhập hệ thống</a> hoặc không có quyền sử dụng chức năng này.");
            if (!Request.IsAjaxRequest())
                return View();

            return PartialView();
        }
        public ActionResult HienThiHocHam([DataSourceRequest] DataSourceRequest request)
        {
            return Json(db.tbl_HocHams.ToDataSourceResult(request));
        }

        //[ValidateAntiForgeryToken]
        public ActionResult TaoHocHam([DataSourceRequest] DataSourceRequest request, tbl_HocHam data)
        {
            if (!CheckRole.IsRole("qldm_hh_t", Session["VietTat"] as string[]))
                return this.Json(new DataSourceResult { Errors = "Bạn không có quyền thực hiện chức năng này!" });
            if (data != null && ModelState.IsValid)
            {
                var createdata = db.tbl_HocHams.Where(m => m.HocHam.ToLower() == data.HocHam.ToLower().Trim()).ToList().Count;
                if (createdata == 0)
                {
                    db.tbl_HocHams.Add(data);
                    db.SaveChanges();
                    // state = true;
                    ////mess = "Thêm mới thành công!";
                }
                else
                {
                    return this.Json(new DataSourceResult { Errors = "Học hàm đã tồn tại!" });
                }
            }
            return Json(ModelState.ToDataSourceResult());
        }
        public ActionResult SuaHocHam([DataSourceRequest] DataSourceRequest request, tbl_HocHam data)
        {
            if (!CheckRole.IsRole("qldm_hh_s", Session["VietTat"] as string[]))
                return this.Json(new DataSourceResult { Errors = "Bạn không có quyền thực hiện chức năng này!" });
            if (data != null && ModelState.IsValid)
            {
                db.Entry(data).State = EntityState.Modified;
                db.SaveChanges();
            }
            return Json(ModelState.ToDataSourceResult());
        }
        public ActionResult XoaHocHam([DataSourceRequest] DataSourceRequest request, tbl_HocHam data)
        {
            if (!CheckRole.IsRole("qldm_hh_x", Session["VietTat"] as string[]))
                return this.Json(new DataSourceResult { Errors = "Bạn không có quyền thực hiện chức năng này!" });
            if (data != null)
            {
                try
                {
                    tbl_HocHam itemdata = db.tbl_HocHams.First(item => item.HocHam == data.HocHam);
                    db.tbl_HocHams.Remove(itemdata);
                    db.SaveChanges();
                }
                catch (Exception)
                {

                    return this.Json(new DataSourceResult { Errors = "Dữ liệu liên quan đến Học hàm này vẫn tồn tại!" });
                }
                
            }
            return Json(ModelState.ToDataSourceResult());
        }
        #endregion

        #region QLHocVi
        public JsonResult LayHocVi()
        {
            return Json(db.tbl_HocVis.ToList(), JsonRequestBehavior.AllowGet);
        }
        public ActionResult HocVi()
        {
            if (!CheckRole.IsRole("qldm_hv_xem", Session["VietTat"] as string[]))
                return Content("Bạn chưa <a href='/Home/Login'>đăng nhập hệ thống</a> hoặc không có quyền sử dụng chức năng này.");
            if (!Request.IsAjaxRequest())
                return View();

            return PartialView();
        }
        public ActionResult HienThiHocVi([DataSourceRequest] DataSourceRequest request)
        {
            return Json(db.tbl_HocVis.ToDataSourceResult(request));
        }

        //[ValidateAntiForgeryToken]
        public ActionResult TaoHocVi([DataSourceRequest] DataSourceRequest request, tbl_HocVi data)
        {
            if (!CheckRole.IsRole("qldm_hv_t", Session["VietTat"] as string[]))
                return this.Json(new DataSourceResult { Errors = "Bạn không có quyền thực hiện chức năng này!" });
            if (data != null && ModelState.IsValid)
            {
                var createdata = db.tbl_HocVis.Where(m => m.HocVi.ToLower() == data.HocVi.ToLower().Trim()).ToList().Count;
                if (createdata == 0)
                {
                    db.tbl_HocVis.Add(data);
                    db.SaveChanges();
                    
                }
                else
                {
                    return this.Json(new DataSourceResult { Errors = "Học vị này đã tồn tại!" });
                }
            }
            return Json(ModelState.ToDataSourceResult());
        }
        public ActionResult SuaHocVi([DataSourceRequest] DataSourceRequest request, tbl_HocVi data)
        {
            if (!CheckRole.IsRole("qldm_hv_s", Session["VietTat"] as string[]))
                return this.Json(new DataSourceResult { Errors = "Bạn không có quyền thực hiện chức năng này!" });
            if (data != null && ModelState.IsValid)
            {
                db.Entry(data).State = EntityState.Modified;
                db.SaveChanges();
            }
            return Json(ModelState.ToDataSourceResult());
        }
        public ActionResult XoaHocVi([DataSourceRequest] DataSourceRequest request, tbl_HocVi data)
        {
            if (!CheckRole.IsRole("qldm_hv_x", Session["VietTat"] as string[]))
                return this.Json(new DataSourceResult { Errors = "Bạn không có quyền thực hiện chức năng này!" });
            if (data != null)
            {
                try
                {
                    tbl_HocVi itemdata = db.tbl_HocVis.First(item => item.HocVi == data.HocVi);
                    db.tbl_HocVis.Remove(itemdata);
                    db.SaveChanges();
                }
                catch (Exception)
                {
                    
                    return this.Json(new DataSourceResult { Errors = "Dữ liệu liên quan đến Học vị này vẫn tồn tại!" });
                }
                
            }
            return Json(ModelState.ToDataSourceResult());
        }
        #endregion

        #region QLNganh
        public JsonResult LayNganh()
        {
            return Json(db.tbl_Nganhs.ToList(), JsonRequestBehavior.AllowGet);
        }
        public ActionResult Nganh()
        {
            if (!CheckRole.IsRole("qldm_n_xem", Session["VietTat"] as string[]))
                return Content("Bạn chưa <a href='/Home/Login'>đăng nhập hệ thống</a> hoặc không có quyền sử dụng chức năng này.");
            if (!Request.IsAjaxRequest())
                return View();

            return PartialView();
        }
        public ActionResult HienThiNganh([DataSourceRequest] DataSourceRequest request)
        {
            return Json(db.tbl_Nganhs.ToDataSourceResult(request));
        }

        //[ValidateAntiForgeryToken]
        public ActionResult TaoNganh([DataSourceRequest] DataSourceRequest request, tbl_Nganh data)
        {
            if (!CheckRole.IsRole("qldm_n_t", Session["VietTat"] as string[]))
                return this.Json(new DataSourceResult { Errors = "Bạn không có quyền thực hiện chức năng này!" });
            if (data != null && ModelState.IsValid)
            {
                var createdata = db.tbl_Nganhs.Where(m => m.Nganh.ToLower() == data.Nganh.ToLower().Trim()).ToList().Count;
                if (createdata == 0)
                {
                    db.tbl_Nganhs.Add(data);
                    db.SaveChanges();
                }
                else
                {
                    return this.Json(new DataSourceResult { Errors = "Ngành đã tồn tại!" });
                }
            }
            return Json(ModelState.ToDataSourceResult());
        }
        public ActionResult SuaNganh([DataSourceRequest] DataSourceRequest request, tbl_Nganh data)
        {
            if (!CheckRole.IsRole("qldm_n_s", Session["VietTat"] as string[]))
                return this.Json(new DataSourceResult { Errors = "Bạn không có quyền thực hiện chức năng này!" });
            if (data != null && ModelState.IsValid)
            {
                db.Entry(data).State = EntityState.Modified;
                db.SaveChanges();
            }
            return Json(ModelState.ToDataSourceResult());
        }
        public ActionResult XoaNganh([DataSourceRequest] DataSourceRequest request, tbl_Nganh data)
        {
            if (!CheckRole.IsRole("qldm_n_x", Session["VietTat"] as string[]))
                return this.Json(new DataSourceResult { Errors = "Bạn không có quyền thực hiện chức năng này!" });
            if (data != null)
            {
                try
                {
                    tbl_Nganh itemdata = db.tbl_Nganhs.First(item => item.MaNganh == data.MaNganh);
                    db.tbl_Nganhs.Remove(itemdata);
                    db.SaveChanges();
                }
                catch (Exception)
                {
                    return this.Json(new DataSourceResult { Errors = "Dữ liệu liên quan đến Ngành này vẫn tồn tại!" });
                }
                
            }
            return Json(ModelState.ToDataSourceResult());
        }

        public ActionResult ImportNganh(HttpPostedFileBase FileImport)
        {

            bool state = false;
            if (!CheckRole.IsRole("qldm_hdt_ne", Session["VietTat"] as string[]))
                Json(new { State = false, Message = "Bạn không có quyền thực hiện chức năng này!" });
            if (FileImport != null)
            {
                // thuc hien thao tac tai day
                if (FileImport.ContentLength > 0)
                {
                    string Extension = System.IO.Path.GetExtension(FileImport.FileName);
                    if (Extension == ".xls" || Extension == ".xlsx")
                    {
                        string path = string.Concat(Server.MapPath("~/Uploads/File/" + DateTime.Now.ToString("MMddyyyyHHmmssfff") + FileImport.FileName));
                        //if (System.IO.File.Exists(path))
                        //{

                        //    System.IO.File.Delete(path);
                        //}
                        FileImport.SaveAs(path);
                        OleDbConnection oledbcon = new OleDbConnection("provider=microsoft.ace.oledb.12.0;data source=" + path + ";extended properties=excel 12.0;");
                        oledbcon.Open();
                        DataTable ExcelSheets = oledbcon.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
                        string SpreadSheetName = ExcelSheets.Rows[0]["TABLE_NAME"].ToString();
                        OleDbCommand oledbcmd = new OleDbCommand("Select * from [" + SpreadSheetName + "]", oledbcon);
                        OleDbDataAdapter oledbda = new OleDbDataAdapter(oledbcmd);

                        DataTable dt = new DataTable();
                        tbl_Nganh item;
                        var Kv = db.tbl_Nganhs.Select(m => m.MaNganh);
                        oledbda.Fill(dt);
                        if (dt.Rows.Count > 0)
                        {
                            if (!dt.Columns.Contains("Mã Ngành"))
                            {
                                mess.Add(new SelectListItem { Text = "Cột Mã Ngành không tồn tại!" });
                                goto next;
                            }
                            if (!dt.Columns.Contains("Ngành"))
                            {
                                mess.Add(new SelectListItem { Text = "Cột Ngành không tồn tại!"});
                                goto next;
                            }
                            if (!dt.Columns.Contains("Tên Ngành"))
                            {
                                mess.Add(new SelectListItem { Text = "Cột Tên Ngành không tồn tại!"});
                                goto next;
                            }
                            for (int i = 0; i < dt.Rows.Count - 1; i++)
                            {
                                foreach (var a in Kv)
                                {
                                    KTNganh = false;
                                    if (a.ToString().ToLower().Trim() == dt.Rows[i]["Mã Ngành"].ToString().ToLower().Trim())
                                    {
                                        KTNganh = true;
                                        break;
                                    }
                                }
                                //try
                                //{
                                if (!KTNganh)
                                {
                                    item = new tbl_Nganh();
                                    item.MaNganh = dt.Rows[i]["Mã Ngành"].ToString().Trim();
                                    item.Nganh = dt.Rows[i]["Ngành"].ToString().Trim();
                                    item.TenNganh = dt.Rows[i]["Tên Ngành"].ToString().Trim();
                                    db.tbl_Nganhs.Add(item);
                                    db.SaveChanges();
                                    stt += 1;
                                }
                                else
                                {
                                    mess.Add(new SelectListItem { Text = "Ngành: " + dt.Rows[i]["Mã Ngành"].ToString() + " đã tồn tại!"});
                                }
                                //}
                                //catch
                                //{
                                //}
                            }
                        next:
                            if (mess.Count > 0)
                            {
                                state = false;
                                if (stt > 0)
                                {
                                    mess.Add(new SelectListItem { Text = "Thực hiện chèn thành công " + stt + " bản ghi!" });
                                }
                            }
                            else
                            {
                                state = true;
                                mess.Add(new SelectListItem { Text = "Thực hiện chèn thành công " + stt + " bản ghi!" });
                            }
                        }
                        else
                        {
                            Response.Write("Bạn phải nhập file định dạng excel!");
                        }
                        oledbcon.Close();
                        System.IO.File.Delete(path);
                    }

                }
            }
            else
               mess.Add(new SelectListItem { Text = "Có lỗi."});

            return Json(new { State = state, Message = mess });
        }
        #endregion

        #region QLKhoa
        public JsonResult LayKhoa()
        {
            return Json(db.tbl_Khoas.ToList(), JsonRequestBehavior.AllowGet);
        }
        public ActionResult Khoa()
        {
            if (!CheckRole.IsRole("qldm_k_xem", Session["VietTat"] as string[]))
                return Content("Bạn chưa <a href='/Home/Login'>đăng nhập hệ thống</a> hoặc không có quyền sử dụng chức năng này.");
            if (!Request.IsAjaxRequest())
                return View();

            return PartialView();
        }
        public ActionResult HienThiKhoa([DataSourceRequest] DataSourceRequest request)
        {
            return Json(db.tbl_Khoas.ToDataSourceResult(request));
        }

        //[ValidateAntiForgeryToken]
        public ActionResult TaoKhoa([DataSourceRequest] DataSourceRequest request, tbl_Khoa data)
        {
            if (!CheckRole.IsRole("qldm_k_t", Session["VietTat"] as string[]))
                return this.Json(new DataSourceResult { Errors = "Bạn không có quyền thực hiện chức năng này!" });
            if (data != null && ModelState.IsValid)
            {
                var createdata = db.tbl_Khoas.Where(m => m.MaKhoa.ToLower() == data.MaKhoa.ToLower().Trim()).ToList().Count;
                if (createdata == 0)
                {
                    db.tbl_Khoas.Add(data);
                    db.SaveChanges();
                    // state = true;
                    ////mess = "Thêm mới thành công!";
                }
                else
                {
                    return this.Json(new DataSourceResult { Errors = "Khoa này đã tồn tại!" });
                }
            }
            return Json(ModelState.ToDataSourceResult());
        }
        public ActionResult SuaKhoa([DataSourceRequest] DataSourceRequest request, tbl_Khoa data)
        {
            if (!CheckRole.IsRole("qldm_k_s", Session["VietTat"] as string[]))
                return this.Json(new DataSourceResult { Errors = "Bạn không có quyền thực hiện chức năng này!" });
            if (data != null && ModelState.IsValid)
            {
                db.Entry(data).State = EntityState.Modified;
                db.SaveChanges();
            }
            return Json(ModelState.ToDataSourceResult());
        }
        public ActionResult XoaKhoa([DataSourceRequest] DataSourceRequest request, tbl_Khoa data)
        {
            if (!CheckRole.IsRole("qldm_k_x", Session["VietTat"] as string[]))
                return this.Json(new DataSourceResult { Errors = "Bạn không có quyền thực hiện chức năng này!" });
            if (data != null)
            {
                try
                {
                    tbl_Khoa itemdata = db.tbl_Khoas.First(item => item.MaKhoa == data.MaKhoa);
                db.tbl_Khoas.Remove(itemdata);
                db.SaveChanges();
                }
                catch (Exception)
                {
                    
                    return this.Json(new DataSourceResult { Errors = "Dữ liệu liên quan đến Khoa này vẫn tồn tại!" });
                }
                
            }
            return Json(ModelState.ToDataSourceResult());
        }

        public ActionResult ImportKhoa(HttpPostedFileBase FileImport)
        {

            bool state = false;
            if (!CheckRole.IsRole("qldm_k_ne", Session["VietTat"] as string[]))
               return  Json(new { State = false, Message = "Bạn không có quyền thực hiện chức năng này!" });
            if (FileImport != null)
            {
                // thuc hien thao tac tai day
                if (FileImport.ContentLength > 0)
                {
                    string Extension = System.IO.Path.GetExtension(FileImport.FileName);
                    if (Extension == ".xls" || Extension == ".xlsx")
                    {
                        string path = string.Concat(Server.MapPath("~/Uploads/File/" + DateTime.Now.ToString("MMddyyyyHHmmssfff") + FileImport.FileName));
                        //if (System.IO.File.Exists(path))
                        //{

                        //    System.IO.File.Delete(path);
                        //}
                        FileImport.SaveAs(path);
                        OleDbConnection oledbcon = new OleDbConnection("provider=microsoft.ace.oledb.12.0;data source=" + path + ";extended properties=excel 12.0;");
                        oledbcon.Open();
                        DataTable ExcelSheets = oledbcon.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
                        string SpreadSheetName = ExcelSheets.Rows[0]["TABLE_NAME"].ToString();
                        OleDbCommand oledbcmd = new OleDbCommand("Select * from [" + SpreadSheetName + "]", oledbcon);
                        OleDbDataAdapter oledbda = new OleDbDataAdapter(oledbcmd);

                        DataTable dt = new DataTable();
                        tbl_Khoa item;
                        var Kv = db.tbl_Khoas.Select(m => m.MaKhoa);
                        oledbda.Fill(dt);
                        if (dt.Rows.Count > 0)
                        {
                            if (!dt.Columns.Contains("Mã Khoa"))
                            {
                                mess.Add(new SelectListItem { Text = "Cột Mã Khoa không tồn tại!"});
                                goto next;
                            }
                            if (!dt.Columns.Contains("Khoa"))
                            {
                                mess.Add(new SelectListItem { Text = "Cột Khoa không tồn tại!"});
                                goto next;
                            }
                            if (!dt.Columns.Contains("Tên Khoa"))
                            {
                                mess.Add(new SelectListItem { Text = "Cột Tên Khoa không tồn tại!"});
                                goto next;
                            }
                            for (int i = 0; i < dt.Rows.Count - 1; i++)
                            {
                                foreach (var a in Kv)
                                {
                                    KTKhoa = false;
                                    if (a.ToString().ToLower().Trim() == dt.Rows[i]["Mã Khoa"].ToString().ToLower().Trim())
                                    {
                                        KTKhoa = true;
                                        break;
                                    }
                                }
                                //try
                                //{
                                if (!KTKhoa)
                                {
                                    item = new tbl_Khoa();
                                    item.MaKhoa = dt.Rows[i]["Mã Khoa"].ToString().Trim();
                                    item.Khoa = dt.Rows[i]["Khoa"].ToString().Trim();
                                    item.TenKhoa = dt.Rows[i]["Tên Khoa"].ToString().Trim();
                                    db.tbl_Khoas.Add(item);
                                    db.SaveChanges();
                                    stt += 1;
                                }
                                else
                                {
                                    mess.Add(new SelectListItem { Text = "Khoa: " + dt.Rows[i]["Mã Khoa"].ToString() + " đã tồn tại!"});
                                }
                                //}
                                //catch
                                //{
                                //}
                            }
                        next:
                            if (mess.Count > 0)
                            {
                                state = false;
                                if (stt > 0)
                                {
                                    mess.Add(new SelectListItem { Text = "Thực hiện chèn thành công " + stt + " bản ghi!" });
                                }
                            }
                            else
                            {
                                state = true;
                                mess.Add(new SelectListItem { Text = "Thực hiện chèn thành công " + stt + " bản ghi!" });
                            }
                        }
                        else
                        {
                            Response.Write("Bạn phải nhập file định dạng excel!");
                        }
                        oledbcon.Close();
                        System.IO.File.Delete(path);
                    }

                }
            }
            else
                mess.Add(new SelectListItem { Text = "Có lỗi." });

            return Json(new { State = state, Message = mess });
        }
        #endregion

        #region QLNhaXuatBan
        public JsonResult LayNhaXuatBan()
        {
            return Json(db.tbl_NhaXuatBans.ToList(), JsonRequestBehavior.AllowGet);
        }
        public ActionResult NhaXuatBan()
        {
            if (!CheckRole.IsRole("qldm_nxb_xem", Session["VietTat"] as string[]))
                return Content("Bạn chưa <a href='/Home/Login'>đăng nhập hệ thống</a> hoặc không có quyền sử dụng chức năng này.");
            if (!Request.IsAjaxRequest())
                return View();

            return PartialView();
        }
        public ActionResult HienThiNhaXuatBan([DataSourceRequest] DataSourceRequest request)
        {
            return Json(db.tbl_NhaXuatBans.ToDataSourceResult(request));
        }

        //[ValidateAntiForgeryToken]
        public ActionResult TaoNhaXuatBan([DataSourceRequest] DataSourceRequest request, tbl_NhaXuatBan data)
        {
            if (!CheckRole.IsRole("qldm_nxb_t", Session["VietTat"] as string[]))
                return this.Json(new DataSourceResult { Errors = "Bạn không có quyền thực hiện chức năng này!" });
            if (data != null && ModelState.IsValid)
            {
                var createdata = db.tbl_NhaXuatBans.Where(m => m.TenNXB.ToLower() == data.TenNXB.ToLower().Trim()).ToList().Count;
                if (createdata == 0)
                {
                    db.tbl_NhaXuatBans.Add(data);
                    SaveChanges(db);
                }
                else
                {
                    return this.Json(new DataSourceResult { Errors = "Nhà xuất bản đã tồn tại!" });
                }
            }
            return Json(ModelState.ToDataSourceResult());
        }
        public ActionResult SuaNhaXuatBan([DataSourceRequest] DataSourceRequest request, tbl_NhaXuatBan data)
        {
            if (!CheckRole.IsRole("qldm_nxb_s", Session["VietTat"] as string[]))
                return this.Json(new DataSourceResult { Errors = "Bạn không có quyền thực hiện chức năng này!" });
            if (data != null && ModelState.IsValid)
            {
                db.Entry(data).State = EntityState.Modified;
                db.SaveChanges();
            }
            return Json(ModelState.ToDataSourceResult());
        }
        public ActionResult XoaNhaXuatBan([DataSourceRequest] DataSourceRequest request, tbl_NhaXuatBan data)
        {
            if (!CheckRole.IsRole("qldm_nxb_x", Session["VietTat"] as string[]))
                return this.Json(new DataSourceResult { Errors = "Bạn không có quyền thực hiện chức năng này!" });
            if (data != null)
            {
                try
                {
                    tbl_NhaXuatBan itemdata = db.tbl_NhaXuatBans.First(item => item.TenNXB == data.TenNXB);
                    db.tbl_NhaXuatBans.Remove(itemdata);
                    db.SaveChanges();
                }
                catch (Exception)
                {
                    
                    return this.Json(new DataSourceResult { Errors = "Dữ liệu liên quan đến NXB này vẫn tồn tại!" });
                }
                
            }
            return Json(ModelState.ToDataSourceResult());
        }
        #endregion

        #region QLTacGia
        public JsonResult LayTacGia()
        {
            return Json(db.tbl_TacGias.ToList(), JsonRequestBehavior.AllowGet);
        }
        public ActionResult TacGia()
        {
            if (!CheckRole.IsRole("qldm_tg_xem", Session["VietTat"] as string[]))
                return Content("Bạn chưa <a href='/Home/Login'>đăng nhập hệ thống</a> hoặc không có quyền sử dụng chức năng này.");
            ViewBag.HocHam = db.tbl_HocHams.ToList();
            ViewBag.HocVi = db.tbl_HocVis.ToList();
            ViewBag.ChucVu = db.tbl_ChucVus.ToList();
            if (!Request.IsAjaxRequest())
                return View();

            return PartialView();
        }
        public ActionResult HienThiTacGia([DataSourceRequest] DataSourceRequest request)
        {
            return Json(db.tbl_TacGias.ToDataSourceResult(request));
        }

        //[ValidateAntiForgeryToken]
        public ActionResult TaoTacGia([DataSourceRequest] DataSourceRequest request, tbl_TacGia data)
        {
            if (!CheckRole.IsRole("qldm_tg_t", Session["VietTat"] as string[]))
                return this.Json(new DataSourceResult { Errors = "Bạn không có quyền thực hiện chức năng này!" });
            if (data != null && ModelState.IsValid)
            {
                var createdata = db.tbl_TacGias.Where(m => m.TenTacGia.ToLower() == data.TenTacGia.ToLower().Trim()).ToList().Count;
                if (createdata == 0)
                {
                    db.tbl_TacGias.Add(data);
                    db.SaveChanges();
                    // state = true;
                    ////mess = "Thêm mới thành công!";
                }
                else
                {
                    return this.Json(new DataSourceResult { Errors = "Tác giả đã tồn tại!" });
                }
            }
            return Json(ModelState.ToDataSourceResult());
        }
        public ActionResult SuaTacGia([DataSourceRequest] DataSourceRequest request, tbl_TacGia data)
        {
            if (!CheckRole.IsRole("qldm_tg_s", Session["VietTat"] as string[]))
                return this.Json(new DataSourceResult { Errors = "Bạn không có quyền thực hiện chức năng này!" });
            if (data != null && ModelState.IsValid)
            {
                db.Entry(data).State = EntityState.Modified;
                db.SaveChanges();
            }
            return Json(ModelState.ToDataSourceResult());
        }
        public ActionResult XoaTacGia([DataSourceRequest] DataSourceRequest request, tbl_TacGia data)
        {
            if (!CheckRole.IsRole("qldm_tg_x", Session["VietTat"] as string[]))
                return this.Json(new DataSourceResult { Errors = "Bạn không có quyền thực hiện chức năng này!" });
            if (data != null)
            {
                tbl_TacGia itemdata = db.tbl_TacGias.First(item => item.MaTacGia == data.MaTacGia);
                db.tbl_TacGias.Remove(itemdata);
                db.SaveChanges();
            }
            return Json(ModelState.ToDataSourceResult());
        }

        public ActionResult ImportTacGia(HttpPostedFileBase FileImport)
        {

            bool state = false;
            if (!CheckRole.IsRole("qldm_tg_ne", Session["VietTat"] as string[]))
                return Json(new { State = false, Message = "Bạn không có quyền thực hiện chức năng này!" });
            if (FileImport != null)
            {
                // thuc hien thao tac tai day
                if (FileImport.ContentLength > 0)
                {
                    string Extension = System.IO.Path.GetExtension(FileImport.FileName);
                    if (Extension == ".xls" || Extension == ".xlsx")
                    {
                        string path = string.Concat(Server.MapPath("~/Uploads/File/" + DateTime.Now.ToString("MMddyyyyHHmmssfff") + FileImport.FileName));
                        //if (System.IO.File.Exists(path))
                        //{

                        //    System.IO.File.Delete(path);
                        //}
                        FileImport.SaveAs(path);
                        OleDbConnection oledbcon = new OleDbConnection("provider=microsoft.ace.oledb.12.0;data source=" + path + ";extended properties=excel 12.0;");
                        oledbcon.Open();
                        DataTable ExcelSheets = oledbcon.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
                        string SpreadSheetName = ExcelSheets.Rows[0]["TABLE_NAME"].ToString();
                        OleDbCommand oledbcmd = new OleDbCommand("Select * from [" + SpreadSheetName + "]", oledbcon);
                        OleDbDataAdapter oledbda = new OleDbDataAdapter(oledbcmd);

                        DataTable dt = new DataTable();
                        tbl_TacGia item;
                        var Kv = db.tbl_TacGias.Select(m => m.TenTacGia);
                        oledbda.Fill(dt);
                        if (dt.Rows.Count > 0)
                        {
                            if (!dt.Columns.Contains("Tên tác giả"))
                            {
                                mess.Add(new SelectListItem { Text = "Cột Tên tác giả không tồn tại!"});
                                goto next;
                            }
                            if (!dt.Columns.Contains("Mã học hàm"))
                            {
                                mess.Add(new SelectListItem { Text = "Cột Mã học hàm không tồn tại!"});
                                goto next;
                            }
                            if (!dt.Columns.Contains("Mã học vị"))
                            {
                                mess.Add(new SelectListItem { Text = "Cột Mã học vị không tồn tại!"});
                                goto next;
                            }
                            if (!dt.Columns.Contains("Mã chức vụ"))
                            {
                                mess.Add(new SelectListItem { Text = "Cột Mã chức vụ không tồn tại!"});
                                goto next;
                            }
                            for (int i = 0; i < dt.Rows.Count - 1; i++)
                            {
                                foreach (var a in Kv)
                                {
                                    KTTacGia = false;
                                    if (a.ToString().ToLower().Trim() == dt.Rows[i]["Tên Tác giả"].ToString().ToLower().Trim())
                                    {
                                        KTTacGia = true;
                                        break;
                                    }
                                }
                                //try
                                //{
                                if (!KTTacGia)
                                {
                                    item = new tbl_TacGia();
                                    item.TenTacGia = dt.Rows[i]["Tên Tác giả"].ToString().Trim();
                                    item.MaHocHam = int.Parse(dt.Rows[i]["Mã Học hàm"].ToString().Trim());
                                    item.MaHocVi = int.Parse(dt.Rows[i]["Mã học vị"].ToString().Trim());
                                    item.MaChucVu = int.Parse(dt.Rows[i]["Mã chức vụ"].ToString().Trim());
                                    if (!dt.Columns.Contains("Ghi Chú"))
                                    {
                                        item.GhiChu = null;
                                    }
                                    else
                                    {
                                        item.GhiChu = dt.Rows[i]["Ghi chú"].ToString().Trim();
                                    }
                                    db.tbl_TacGias.Add(item);
                                    db.SaveChanges();
                                }
                                else
                                {
                                    mess.Add(new SelectListItem { Text = "Tác giả: " + dt.Rows[i]["Tên Tác giả"].ToString() + " đã tồn tại!"});
                                }
                            }
                        next:
                            if (mess.Count > 0)
                            {
                                state = false;
                                if (stt > 0)
                                {
                                    mess.Add(new SelectListItem { Text = "Thực hiện chèn thành công " + stt + " bản ghi!" });
                                }
                            }
                            else
                            {
                                state = true;
                                mess.Add(new SelectListItem { Text = "Thực hiện chèn thành công " + stt + " bản ghi!" });
                            }
                        }
                        else
                        {
                            Response.Write("Bạn phải nhập file định dạng excel!");
                        }
                        oledbcon.Close();
                        System.IO.File.Delete(path);
                    }

                }
            }
            else
                mess.Add(new SelectListItem { Text = "Có lỗi."});

            return Json(new { State = state, Message = mess });
        }
        #endregion

        #region QLDaoTao
        public JsonResult LayDaoTao()
        {
            return Json(db.tbl_DaoTaos.ToList(), JsonRequestBehavior.AllowGet);
        }
        public ActionResult DaoTao()
        {
            if (!CheckRole.IsRole("qldm_dt_xem", Session["VietTat"] as string[]))
                return Content("Bạn chưa <a href='/Home/Login'>đăng nhập hệ thống</a> hoặc không có quyền sử dụng chức năng này.");
            ViewBag.Nganh = db.tbl_Nganhs.ToList();
            ViewBag.MonHoc = db.tbl_MonHocs.ToList();
            if (!Request.IsAjaxRequest())
                return View();

            return PartialView();
        }
        public ActionResult HienThiDaoTao([DataSourceRequest] DataSourceRequest request)
        {
            return Json(db.tbl_DaoTaos.ToDataSourceResult(request));
        }

        //[ValidateAntiForgeryToken]
        public ActionResult TaoDaoTao([DataSourceRequest] DataSourceRequest request, tbl_DaoTao data)
        {
            if (!CheckRole.IsRole("qldm_dt_t", Session["VietTat"] as string[]))
                return this.Json(new DataSourceResult { Errors = "Bạn không có quyền thực hiện chức năng này!" });
            if (data != null && ModelState.IsValid)
            {
                var createdata = db.tbl_DaoTaos.Where(m => m.MaNganh.ToLower() == data.MaNganh.ToLower().Trim() && m.MaMonHoc == data.MaMonHoc).ToList().Count;
                if (createdata == 0)
                {
                    db.tbl_DaoTaos.Add(data);
                    db.SaveChanges();
                    // state = true;
                    ////mess = "Thêm mới thành công!";
                }
                else
                {
                    return this.Json(new DataSourceResult { Errors = "Đào tạo đã tồn tại!" });
                }
            }
            return Json(ModelState.ToDataSourceResult());
        }
        public ActionResult SuaDaoTao([DataSourceRequest] DataSourceRequest request, tbl_DaoTao data)
        {
            if (!CheckRole.IsRole("qldm_dt_s", Session["VietTat"] as string[]))
                return this.Json(new DataSourceResult { Errors = "Bạn không có quyền thực hiện chức năng này!" });
            if (data != null && ModelState.IsValid)
            {
                db.Entry(data).State = EntityState.Modified;
                db.SaveChanges();
            }
            return Json(ModelState.ToDataSourceResult());
        }
        public ActionResult XoaDaoTao([DataSourceRequest] DataSourceRequest request, tbl_DaoTao data)
        {
            if (!CheckRole.IsRole("qldm_hdt_x", Session["VietTat"] as string[]))
                return this.Json(new DataSourceResult { Errors = "Bạn không có quyền thực hiện chức năng này!" });
            if (data != null)
            {
                try
                {
                    tbl_DaoTao itemdata = db.tbl_DaoTaos.First(item => item.MaNganh == data.MaNganh && item.MaMonHoc == data.MaMonHoc);
                    db.tbl_DaoTaos.Remove(itemdata);
                    db.SaveChanges();
                }
                catch (Exception)
                {
                    
                    return this.Json(new DataSourceResult { Errors = "Dữ liệu liên quan đến Đào tạo này vẫn tồn tại!" });
                }
                
            }
            return Json(ModelState.ToDataSourceResult());
        }

        public ActionResult ImportDaoTao(HttpPostedFileBase FileImport)
        {

            bool state = false;
            if (!CheckRole.IsRole("qldm_dt_ne", Session["VietTat"] as string[]))
                return Json(new { State = false, Message = "Bạn không có quyền thực hiện chức năng này!" });
            if (FileImport != null)
            {
                // thuc hien thao tac tai day
                if (FileImport.ContentLength > 0)
                {
                    string Extension = System.IO.Path.GetExtension(FileImport.FileName);
                    if (Extension == ".xls" || Extension == ".xlsx")
                    {
                        string path = string.Concat(Server.MapPath("~/Uploads/File/" + DateTime.Now.ToString("MMddyyyyHHmmssfff") + FileImport.FileName));
                        //if (System.IO.File.Exists(path))
                        //{

                        //    System.IO.File.Delete(path);
                        //}
                        FileImport.SaveAs(path);
                        OleDbConnection oledbcon = new OleDbConnection("provider=microsoft.ace.oledb.12.0;data source=" + path + ";extended properties=excel 12.0;");
                        oledbcon.Open();
                        DataTable ExcelSheets = oledbcon.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
                        string SpreadSheetName = ExcelSheets.Rows[0]["TABLE_NAME"].ToString();
                        OleDbCommand oledbcmd = new OleDbCommand("Select * from [" + SpreadSheetName + "]", oledbcon);
                        OleDbDataAdapter oledbda = new OleDbDataAdapter(oledbcmd);

                        DataTable dt = new DataTable();
                        tbl_DaoTao item;
                        var dsMon = db.tbl_MonHocs;
                        var dsNganh = db.tbl_Nganhs;

                        var DaoTao = db.tbl_DaoTaos;
                        oledbda.Fill(dt);
                        if (dt.Rows.Count > 0)
                        {
                            if (!dt.Columns.Contains("Mã Ngành"))
                            {
                                mess.Add(new SelectListItem { Text = "Cột Mã Ngành không tồn tại!"});
                                goto next;
                            }
                            if (!dt.Columns.Contains("Mã Môn học"))
                            {
                                mess.Add(new SelectListItem { Text = "Cột Mã Môn học không tồn tại!"});
                                goto next;
                            }
                            if (!dt.Columns.Contains("Năm học"))
                            {
                                mess.Add(new SelectListItem { Text = "Cột Năm học không tồn tại!"});
                                goto next;
                            }
                            if (!dt.Columns.Contains("Kỳ học"))
                            {
                                mess.Add(new SelectListItem { Text = "Cột Kỳ học không tồn tại!"});
                                goto next;
                            }
                            if (!dt.Columns.Contains("Số tín chỉ"))
                            {
                                mess.Add(new SelectListItem { Text = "Cột Số tín chỉ không tồn tại!"});
                                goto next;
                            }
                            for (int i = 0; i < dt.Rows.Count - 1; i++)
                            {
                                //kiem tra khoa ngoai
                                foreach (var ma in dsMon)
                                {
                                    KTMonHoc = false;
                                    if (int.Parse(ma.MaMonHoc.ToString().Trim()) == int.Parse(dt.Rows[i]["Mã Môn học"].ToString().Trim()))
                                    {
                                        KTMonHoc = true;
                                        break;
                                    }
                                }
                                if (!KTMonHoc)
                                {
                                    mess.Add(new SelectListItem { Text = "Môn học " + dt.Rows[i]["Mã Môn học"].ToString() +" không tồn tại!"});
                                }

                                //kiem tra khoa ngoai
                                foreach (var ma in dsNganh)
                                {
                                    KTNganh = false;
                                    if (ma.MaNganh.ToString().Trim() == dt.Rows[i]["Mã Ngành"].ToString().ToLower().Trim())
                                    {
                                        KTNganh = true;
                                        break;
                                    }
                                }
                                if (!KTNganh)
                                {
                                    mess.Add(new SelectListItem { Text = "Ngành " + dt.Rows[i]["Mã Ngành"].ToString() +" không tồn tại!"});
                                }

                                //kiem tra ton tai
                                foreach (var a in DaoTao)
                                {
                                    KTDaoTao = false;
                                    if (a.MaMonHoc == int.Parse(dt.Rows[i]["Mã Môn học"].ToString()) &&
                                        a.MaNganh.ToString().ToLower().Trim() == dt.Rows[i]["Mã Ngành"].ToString().ToLower().Trim())
                                    {
                                        KTDaoTao = true;
                                        break;
                                    }
                                }
                                if (KTDaoTao)
                                {
                                    mess.Add(new SelectListItem { Text = "Đào tạo: môn " + dt.Rows[i]["Mã Môn học"].ToString() + " của ngành "+
                                                                                           dt.Rows[i]["Mã Ngành"].ToString() + " đã tồn tại!"
                                    });
                                }

                                if (!KTDaoTao && KTMonHoc && KTNganh)
                                {
                                    item = new tbl_DaoTao();
                                    item.MaNganh = dt.Rows[i]["Mã Ngành"].ToString().Trim();
                                    item.MaMonHoc = int.Parse(dt.Rows[i]["Mã Môn học"].ToString().Trim());
                                    item.NamHoc = int.Parse(dt.Rows[i]["Năm học"].ToString().Trim());
                                    item.KyHoc = int.Parse(dt.Rows[i]["Kỳ học"].ToString().Trim());
                                    item.SoTinChi = int.Parse(dt.Rows[i]["Số tín chỉ"].ToString().Trim());
                                    db.tbl_DaoTaos.Add(item);
                                    SaveChanges(db);
                                    stt += 1;
                                }
                            }
                        next:
                            if (mess.Count > 0)
                            {
                                state = false;
                                if (stt > 0)
                                {
                                    mess.Add(new SelectListItem { Text = "Thực hiện chèn thành công " + stt + " bản ghi!" });
                                }
                            }
                            else
                            {
                                state = true;
                                mess.Add(new SelectListItem { Text = "Thực hiện chèn thành công " + stt + " bản ghi!" });
                            }
                        }
                        else
                        {
                            Response.Write("Bạn phải nhập file định dạng excel!");
                        }
                        oledbcon.Close();
                        System.IO.File.Delete(path);
                    }

                }
            }
            else
                mess.Add(new SelectListItem { Text = "Có lỗi."});

            return Json(new { State = state, Message = mess });
        }
        #endregion

        #region QLMonHoc
        public JsonResult LayMonHoc()
        {
            return Json(db.tbl_MonHocs.ToList(), JsonRequestBehavior.AllowGet);
        }
        public ActionResult MonHoc()
        {
            if (!CheckRole.IsRole("qldm_mh_xem", Session["VietTat"] as string[]))
                return Content("Bạn chưa <a href='/Home/Login'>đăng nhập hệ thống</a> hoặc không có quyền sử dụng chức năng này.");
            ViewBag.Khoa = db.tbl_Khoas.ToList();
            ViewBag.GiaoTrinh = db.tbl_GiaoTrinhs.ToList();
            if (!Request.IsAjaxRequest())
                return View();

            return PartialView();
        }
        public ActionResult HienThiMonHoc([DataSourceRequest] DataSourceRequest request)
        {
            return Json(db.tbl_MonHocs.ToDataSourceResult(request));
        }

        //[ValidateAntiForgeryToken]
        public ActionResult TaoMonHoc([DataSourceRequest] DataSourceRequest request, tbl_MonHoc data)
        {
            if (!CheckRole.IsRole("qldm_mh_t", Session["VietTat"] as string[]))
                return this.Json(new DataSourceResult { Errors = "Bạn không có quyền thực hiện chức năng này!" });
            if (data != null && ModelState.IsValid)
            {

                if (db.tbl_MonHocs.Where(m => m.TenMonHoc.ToLower().Trim() == data.TenMonHoc.ToLower().Trim()).Count() == 0)
                {
                    db.tbl_MonHocs.Add(data);
                    db.SaveChanges();
                }
                else
                {
                    return this.Json(new DataSourceResult { Errors = "Môn học đã tồn tại!" });
                }
            }
            return Json(ModelState.ToDataSourceResult());
        }
        public ActionResult SuaMonHoc([DataSourceRequest] DataSourceRequest request, tbl_MonHoc data)
        {
            if (!CheckRole.IsRole("qldm_mh_s", Session["VietTat"] as string[]))
                return this.Json(new DataSourceResult { Errors = "Bạn không có quyền thực hiện chức năng này!" });
            if (data != null && ModelState.IsValid)
            {
                db.Entry(data).State = EntityState.Modified;
                db.SaveChanges();
            }
            return Json(ModelState.ToDataSourceResult());
        }
        public ActionResult XoaMonHoc([DataSourceRequest] DataSourceRequest request, tbl_MonHoc data)
        {
            if (!CheckRole.IsRole("qldm_mh_x", Session["VietTat"] as string[]))
                return this.Json(new DataSourceResult { Errors = "Bạn không có quyền thực hiện chức năng này!" });
            if (data != null)
            {
                try
                {
                    tbl_MonHoc itemdata = db.tbl_MonHocs.First(item => item.MaMonHoc == data.MaMonHoc);
                    db.tbl_MonHocs.Remove(itemdata);
                    db.SaveChanges();
                }
                catch (Exception)
                {
                    return this.Json(new DataSourceResult { Errors = "Dữ liệu liên quan đến Môn này vẫn tồn tại!" });
                }
                
            }
            return Json(ModelState.ToDataSourceResult());
        }

        public ActionResult ImportMonHoc(HttpPostedFileBase FileImport)
        {

            bool state = false;
            if (!CheckRole.IsRole("qldm_mh_ne", Session["VietTat"] as string[]))
                return Json(new { State = false, Message = "Bạn không có quyền thực hiện chức năng này!" });

            if (FileImport != null)
            {
                // thuc hien thao tac tai day
                if (FileImport.ContentLength > 0)
                {
                    string Extension = System.IO.Path.GetExtension(FileImport.FileName);
                    if (Extension == ".xls" || Extension == ".xlsx")
                    {
                        string path = string.Concat(Server.MapPath("~/Uploads/File/" + DateTime.Now.ToString("MMddyyyyHHmmssfff") + FileImport.FileName));
                        //if (System.IO.File.Exists(path))
                        //{

                        //    System.IO.File.Delete(path);
                        //}
                        FileImport.SaveAs(path);
                        OleDbConnection oledbcon = new OleDbConnection("provider=microsoft.ace.oledb.12.0;data source=" + path + ";extended properties=excel 12.0;");
                        oledbcon.Open();
                        DataTable ExcelSheets = oledbcon.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
                        string SpreadSheetName = ExcelSheets.Rows[0]["TABLE_NAME"].ToString();
                        OleDbCommand oledbcmd = new OleDbCommand("Select * from [" + SpreadSheetName + "]", oledbcon);
                        OleDbDataAdapter oledbda = new OleDbDataAdapter(oledbcmd);

                        DataTable dt = new DataTable();
                        tbl_MonHoc item;
                        var dsKhoa = db.tbl_Khoas;
                        var dsGiaoTrinh = db.tbl_GiaoTrinhs;

                        var MonHoc = db.tbl_MonHocs;
                        oledbda.Fill(dt);
                        if (dt.Rows.Count > 0)
                        {
                            if (!dt.Columns.Contains("Mã môn học"))
                            {
                                mess.Add(new SelectListItem { Text = "Cột Mã môn học không tồn tại!"});
                                goto next;
                            }
                            if (!dt.Columns.Contains("Tên môn học"))
                            {
                                mess.Add(new SelectListItem { Text = "Cột Tên môn học không tồn tại!"});
                                goto next;
                            }
                            if (!dt.Columns.Contains("Mã khoa"))
                            {
                                mess.Add(new SelectListItem { Text = "Cột Mã khoa không tồn tại!"});
                                goto next;
                            }
                            if (!dt.Columns.Contains("Mã giáo trình"))
                            {
                                mess.Add(new SelectListItem { Text = "Cột Mã giáo trình không tồn tại!"});
                                goto next;
                            }
                            for (int i = 0; i < dt.Rows.Count - 1; i++)
                            {
                                //kiem tra khoa ngoai
                                foreach (var ma in dsKhoa)
                                {
                                    KTKhoa = false;
                                    if (ma.MaKhoa == dt.Rows[i]["Mã Khoa"].ToString().ToLower().Trim())
                                    {
                                        KTKhoa = true;
                                        break;
                                    }
                                }
                                if (!KTKhoa)
                                {
                                    mess.Add(new SelectListItem { Text = "Khoa " + dt.Rows[i]["Mã Khoa"].ToString() + " không tồn tại!" });
                                }

                                //kiem tra khoa ngoai
                                foreach (var ma in dsGiaoTrinh)
                                {
                                    KTGiaoTrinh = false;
                                    if (ma.MaGiaoTrinh.ToString().ToLower().Trim() == dt.Rows[i]["Mã Giao Trinh"].ToString().ToLower().Trim())
                                    {
                                        KTGiaoTrinh = true;
                                        break;
                                    }
                                }
                                if (!KTGiaoTrinh)
                                {
                                    mess.Add(new SelectListItem { Text = "Giáo trình " + dt.Rows[i]["Mã Giáo trình"].ToString() + " không tồn tại!" });
                                }

                                foreach (var a in MonHoc)
                                {
                                    KTMonHoc = false;
                                    if (int.Parse(a.MaMonHoc.ToString().ToLower().Trim()) == int.Parse(dt.Rows[i]["Mã Môn học"].ToString()))
                                    {
                                        KTMonHoc = true;
                                        break;
                                    }
                                }
                                if (KTMonHoc)
                                {
                                    mess.Add(new SelectListItem { Text = "Môn học " + dt.Rows[i]["Mã Môn học"].ToString() + " đã tồn tại!" });
                                }

                                if (!KTMonHoc && KTMonHoc && KTNganh)
                                {
                                    item = new tbl_MonHoc();
                                    item.MaMonHoc = int.Parse(dt.Rows[i]["Mã môn học"].ToString());
                                    item.TenMonHoc = dt.Rows[i]["Tên Môn học"].ToString().Trim();
                                    item.MaKhoa = dt.Rows[i]["Mã khoa"].ToString().Trim();
                                    item.MaGiaoTrinh = dt.Rows[i]["Mã giáo trình"].ToString().Trim();
                                    db.tbl_MonHocs.Add(item);
                                    SaveChanges(db);
                                    stt += 1;
                                }
                            }
                        next:
                            if (mess.Count > 0)
                            {
                                state = false;
                                if (stt > 0)
                                {
                                    mess.Add(new SelectListItem { Text = "Thực hiện chèn thành công " + stt + " bản ghi!" });
                                }
                            }
                            else
                            {
                                state = true;
                                mess.Add(new SelectListItem { Text = "Thực hiện chèn thành công " + stt + " bản ghi!" });
                            }
                        }
                        else
                        {
                            Response.Write("Bạn phải nhập file định dạng excel!");
                        }
                        oledbcon.Close();
                        System.IO.File.Delete(path);
                    }

                }
            }
            else
                mess.Add(new SelectListItem { Text = "Có lỗi."});

            return Json(new { State = state, Message = mess });
        }
        #endregion
    }
}